package com.taotao.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.taotao.common.pojo.EUTreeNode;
import com.taotao.common.pojo.TaotaoResult;
import com.taotao.mapper.TbContentCategoryMapper;
import com.taotao.pojo.TbContentCategory;
import com.taotao.pojo.TbContentCategoryExample;
import com.taotao.pojo.TbContentCategoryExample.Criteria;
import com.taotao.service.ContentCategoryService;

/**
 * 内容分类管理
 * @author Administrator
 *
 */
@Service
public class ContentCategoryServiceImpl implements ContentCategoryService {
	
	@Autowired
	private TbContentCategoryMapper contentCategoryMapper;
	
	/**
	 * 根据父节点id查询其下子节点
	 * @param parentId
	 * @return
	 */
	@Override
	public List<EUTreeNode> getCategoryList(long parentId) {
		//根据parentid查询节点列表
		TbContentCategoryExample example = new TbContentCategoryExample();
		Criteria criteria = example.createCriteria();
		//添加查询条件,根据parentId查
		criteria.andParentIdEqualTo(parentId);
		//执行查询
		List<TbContentCategory> list = contentCategoryMapper.selectByExample(example);
		List<EUTreeNode> resultList = new ArrayList<>();
		for(TbContentCategory tbContentCategory : list){
			//创建一个节点
			EUTreeNode node = new EUTreeNode();
			node.setId(tbContentCategory.getId());
			node.setText(tbContentCategory.getName());
			node.setState(tbContentCategory.getIsParent()?"closed":"open");
			resultList.add(node);
		}
		return resultList;
	}

	/**
	 * 新增节点
	 * @param parentId
	 * @param name
	 * @return
	 */
	@Override
	public TaotaoResult insertContentCategory(long parentId, String name) {
		//创建pojo
		TbContentCategory contentCategory = new TbContentCategory();
		contentCategory.setName(name);//设置文本
		contentCategory.setIsParent(false);//新增的肯定是叶子节点,没有子节点
		//'状态。可选值:1(正常),2(删除)',
		contentCategory.setStatus(1);
		contentCategory.setParentId(parentId);
		contentCategory.setSortOrder(1);
		contentCategory.setCreated(new Date());
		contentCategory.setUpdated(new Date());
		//添加记录
		contentCategoryMapper.insert(contentCategory);
		/**
		 * 如果是在叶子节点添加的子节点,那么叶子节点的state属性就得设置为closed,变成目录
		 * 查看父节点的isParent列是否为true，如果不是true改成true
		 */
		TbContentCategory parentCat = contentCategoryMapper.selectByPrimaryKey(parentId);
		//判断是否为true
		if(!parentCat.getIsParent()) {
			parentCat.setIsParent(true);
			contentCategoryMapper.updateByPrimaryKey(parentCat);
		}
		//返回结果
		return TaotaoResult.ok(contentCategory);
	}

	
	/**
	 * 删除节点
	 * @param parentId
	 * @param id
	 * @return
	 */
	@Override
	public TaotaoResult deleteContentCategory(long parentId, long id) {
		//删除节点
		int resultRow = contentCategoryMapper.deleteByPrimaryKey(id);
		if(resultRow>0){
			//判断parentid对应的记录下是否有子节点
			//根据parentid查询节点列表
			TbContentCategoryExample example = new TbContentCategoryExample();
			Criteria criteria = example.createCriteria();
			//添加查询条件,根据parentId查
			criteria.andParentIdEqualTo(parentId);
			//执行查询
			List<TbContentCategory> list = contentCategoryMapper.selectByExample(example);
			//说明删除上面的节点后,该父节点下已经没有其他子节点了,需要将他改为非目录的形式展现
			if(list.size() == 0){
				TbContentCategory parentCat = contentCategoryMapper.selectByPrimaryKey(parentId);
				parentCat.setIsParent(false);
				contentCategoryMapper.updateByPrimaryKey(parentCat);
			}
		}
		return TaotaoResult.ok();
	}

	/**
	 * 更新节点名称
	 * @param id
	 * @param name
	 * @return
	 */
	@Override
	public TaotaoResult updateContentCategory(long id, String name) {
		TbContentCategory contentCategory = contentCategoryMapper.selectByPrimaryKey(id);
		//更新名称
		contentCategory.setName(name);
		contentCategoryMapper.updateByPrimaryKey(contentCategory);
		return TaotaoResult.ok();
	}

}
